#ifndef CHARTWIDGET_H
#define CHARTWIDGET_H

#include <QWidget>
#include <QFrame>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QLabel>
#include <QTableWidget>
#include <QChart>
#include <QLineSeries>
#include <QScatterSeries>
#include <QChartView>
#include <QValueAxis>
#include <QPointF>
#include <QList>
#include <QTimer>

class ChartWidget : public QFrame
{
    Q_OBJECT

public:
    explicit ChartWidget(QWidget *parent = nullptr);
    ~ChartWidget();

    // 数据系列类型
    enum DataSeriesType {
        LimeClass,          // 石灰类
        RawWhiteClass,      // 生白类
        IronOreClass,       // 铁矿石类
        ActualLancePos,     // 实际枪位
        StandardLancePos,   // 标准枪位
        OxygenFlow          // 氧气流量
    };

    // 添加数据点
    void addDataPoint(DataSeriesType type, double x, double y);
    void setDataSeries(DataSeriesType type, const QList<QPointF> &points);
    
    // 设置图表范围
    void setXRange(double min, double max);
    void setYRange(double min, double max);
    
    // 动态调整坐标范围
    void setAutoRangeEnabled(bool enabled);
    bool isAutoRangeEnabled() const;
    void updateRangeFromData();  // 根据数据更新范围

    // 设置表格数据
    void setTableItem(int row, int column, const QString& value);
    QString tableItem(int row, int column) const;
    
    // 设置当前时间点
    void setCurrentTime(double time);
    
    // 设置信息框内容
    void setInfoBox(const QString &duration, const QString &height, const QString &flowRate);

signals:
    void timeChanged(double time);

protected:
    void resizeEvent(QResizeEvent *event) override;

private:
    void setupUI();
    void setupConnections();
    void setupChart();
    void setupTestData();
    QWidget* createLegendWidget();

private:
    QVBoxLayout *m_mainLayout;
    QChartView *m_chartView;
    QChart *m_chart;
    QTableWidget *m_dataTable;
    
    // 图表系列
    QLineSeries *m_actualLanceSeries;
    QLineSeries *m_standardLanceSeries;
    QLineSeries *m_oxygenFlowSeries;
    QScatterSeries *m_limeClassSeries;
    QScatterSeries *m_rawWhiteClassSeries;
    QScatterSeries *m_ironOreClassSeries;
    
    // 坐标轴
    QValueAxis *m_xAxis;
    QValueAxis *m_yAxis;
    
    // 图表范围
    double m_xMin, m_xMax;
    double m_yMin, m_yMax;
    double m_currentTime;
    bool m_autoRangeEnabled;  // 是否启用自动范围调整
    double m_xPadding;        // X轴边距比例（0.1表示10%）
    double m_yPadding;        // Y轴边距比例（0.1表示10%）
    
    // 信息框内容
    QString m_duration;
    QString m_height;
    QString m_flowRate;
    
    // 定时器
    QTimer *m_updateTimer;
};

#endif // CHARTWIDGET_H
